const KoaRouter = require("@koa/router");
const { verifyAuthorization } = require("../middleware/login.middleware");
const momentController = require("../controller/moment.controller");
const { verifyMomentPermission, verifyPermission } = require("../middleware/permission.middleware");
const verifyResourceExists = require("../middleware/exists.middleware");
const verifyLabelName = require("../middleware/label.middleware");
const momentRouter = new KoaRouter({ prefix: "/moment" });

// 1.增：发布动态
momentRouter.post(`/publish`, verifyAuthorization, momentController.create);
// 2.查：获取动态列表
//  查询动列表，同时展示信息个数、动态发表者信息
momentRouter.get("/list", momentController.list);
// 查看某个动态详情
// 查询动态详情，同时展示动态创建者信息，对应评论，对应评论是由谁评论的,标签列表以及标签由谁创建
momentRouter.get("/:momentId", verifyResourceExists, momentController.detail);
// // 3.删：删除动态
// momentRouter.delete("/:momentId", verifyAuthorization, verifyMomentPermission, momentController.remove);
// // 4.改：修改动态
// // 验证：登录的用户才能修改动态，而且只能修改自己的动态
// momentRouter.patch("/:momentId", verifyAuthorization, verifyMomentPermission, momentController.update);

// 3.删：删除动态
momentRouter.delete("/:momentId", verifyAuthorization, verifyResourceExists, verifyPermission, momentController.remove);
// 4.改：修改动态
// 验证：登录的用户才能修改动态，而且只能修改自己的动态
momentRouter.patch("/:momentId", verifyAuthorization, verifyResourceExists, verifyPermission, momentController.update);

// 5.增：给动态添加标签（新标签）
/**
 * 中间件：
 * 1、是否登录
 * 2、验证是否有操作这个动态的权限
 * 3、额外中间件：验证label的name是否存在于label表中
 * ** 如果存在，直接使用即可
 * ** 如果不存在，需要先将label的name添加label表
 * 4、最终步骤
 * ** 所有labels都在label表中
 * ** 动态和label的关系，添加到关系表moment_label中
 */
momentRouter.post("/:momentId/labels", verifyAuthorization, verifyPermission, verifyLabelName, momentController.addLabels);

module.exports = momentRouter;
